#include <iostream>

using std::cout;
using std::endl;

class Stack 
{
public:
    Stack(int sz = 10)
    : _size(sz)
    , _data(new int[_size]())
    , _top(-1)
    {
        cout << "Stack(int = 10)" << endl;
    }

    ~Stack()
    {
        cout << "~Stack()" << endl;
        if(_data)
        {
            delete [] _data;
            _data = nullptr;
        }
    }

	bool empty() const	//判断栈是否为空
    {
#if 0
        if(_top == -1)
        /* if(_top = -1) */
        {
            return true;
        }
        else
        {
            return false;
        }
#endif
        return (-1 == _top);
    }

	bool full() const	//判断栈是否已满
    {
        return (_top == _size - 1);
    }

	void push(const int &value)  //元素入栈
    {
        if(!full())
        {
            _data[++_top]  = value;
        }
        else
        {
            cout << "栈是满的，不能进行push操作" << endl;
            return;
        }
    }

	void pop()     //元素出栈
    {
        if(!empty())
        {
            --_top;
        }
        else
        {
            cout << "该栈是空的，不能进行pop" << endl;
            return;
        }
    }

	int top() const		//获取栈顶元素
    {
        if(!empty())
        {
            return _data[_top];
        }
        else
        {
            return -1;
        }
    }
private:
    int _size;//元素的个数
    int *_data;//存放元素的值
    int _top;//栈顶指针
};

void test()
{
    Stack st(10);
    cout << "栈是不是空的  " << st.empty() << endl; 
    st.push(1);
    cout << "栈是不是满的  " << st.full() << endl; 

    //只要栈不满，就可以一直向其中添加元素
    for(int idx = 2; idx != 15; ++idx)
    {
        st.push(idx);
    }
    cout << "栈是不是满的  " << st.full() << endl; 

    //将栈中所有元素打印出来
    while(!st.empty())
    {
        cout << st.top() << "  ";
        st.pop();
    }
    cout << endl;
    cout << "栈是不是空的  " << st.empty() << endl; 
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

